package com.easyban.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.easyban.dto.ParentCategoriesDto;
import com.easyban.entity.ParentCategories;
import com.easyban.entity.SubCategories;
import com.easyban.mapper.ParentCategoriesMapper;
import com.easyban.mapper.SubCategoriesMapper;
import com.easyban.service.ParentCategoriesService;
import com.easyban.service.SubCategoriesService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;

@Service
public class ParentCategoriesServiceImpl extends ServiceImpl<ParentCategoriesMapper, ParentCategories> implements ParentCategoriesService {
    @Autowired
    SubCategoriesMapper subCategoriesMapper;


    /**
     * 获取所有父分类及其子分类
     *
     * 这个方法首先获取所有父分类列表，然后为每个父分类创建一个 DTO（数据传输对象），
     * 使用 Hutool 的 BeanUtil.copyProperties 方法将父分类的属性复制到 DTO 中，
     * 并为每个父分类获取其对应的子分类列表，最后将包含子分类信息的 DTO 添加到结果列表中。
     *
     * @return 包含父分类及其子分类的 DTO 列表
     */
    @Override
    public List<ParentCategoriesDto> allList() {
        // 获取所有父分类
        List<ParentCategories> list = super.list();

        // 创建一个空的 DTO 列表，用于存放最终的结果
        List<ParentCategoriesDto> dtoList = new ArrayList<>();

        // 遍历每一个父分类
        for (ParentCategories parent : list) {
            // 为当前父分类创建一个 DTO 对象
            ParentCategoriesDto dto = new ParentCategoriesDto();

            // 使用 Hutool 的 BeanUtil.copyProperties 方法将父分类的属性复制到 DTO 中
            BeanUtil.copyProperties(parent, dto);

            // 获取当前父分类对应的子分类列表
            List<SubCategories> subCategories = getSubCategoriesByParentId(parent.getId());

            // 将子分类列表设置到 DTO 中
            dto.setSubCategories(subCategories);

            // 将包含子分类信息的 DTO 添加到结果列表中
            dtoList.add(dto);
        }

        // 返回包含父分类及其子分类的 DTO 列表
        return dtoList;
    }


    /**
     * 通过父分类 ID 获取子分类列表
     *
     * @param parentId 父分类 ID
     * @return 子分类列表
     */
    private List<SubCategories> getSubCategoriesByParentId(Integer parentId) {
        // 实现你获取子分类的逻辑，例如从数据库中查询
        LambdaQueryWrapper<SubCategories> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SubCategories::getParentId, parentId);

        return subCategoriesMapper.selectList(queryWrapper);
    }
}
